/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package mx.edu.itschapala.sistemas.septimo.control;

/**
 *
 * @author Zathler
 */
import mx.edu.itschapala.sistemas.septimo.modelo.*;
import java.io.*;
import java.util.*;
import mx.edu.itschapala.sistemas.septimo.vista.enumeracion.TiposBusqueda;

public class ProductoLnArchivo implements ProductoLNLocal{
    
    public ProductoLnArchivo(){
        llenarL();
    }

	private List<Producto> lista=new ArrayList<Producto>();

	public void registrar(Producto producto){
		try{
		FileOutputStream file=new FileOutputStream("productos.txt");
		ObjectOutputStream out=new ObjectOutputStream(file);
		lista.add(producto);
		for(Producto p:lista){
			out.writeObject(p);
		}
		//out.writeObject(producto);
		out.close();
	}catch(Exception e){
		System.out.println("Error en el archivo");
	}
	}

	//modificado el 17/09/14
	public void modificar(Producto producto){
		int pos=-1;
		try{
			
			for(int x=0;x<lista.size();x++){
				if(lista.get(x).getCodigo()==producto.getCodigo()){
					pos=x;
					
				}
			}if(pos!=-1){
			lista.set(pos,producto);
		}
		FileOutputStream file=new FileOutputStream("productos.txt");
		ObjectOutputStream out=new ObjectOutputStream(file);
		for(Producto p:lista){
			out.writeObject(p);
		}
		//out.writeObject(producto);
		out.close();
	}catch(Exception e){
		e.printStackTrace();
		System.out.println("error en modificar");
	}

	}

	//modificado el 17/09/14
	public void eliminar(Producto producto){
		int pos=-1;
		try{
			
			for(int x=0;x<lista.size();x++){
				if(lista.get(x).getCodigo()==producto.getCodigo()){
					pos=x;
					
				}
			}if(pos!=-1){
			lista.remove(pos);
		}
		//Aqui
		FileOutputStream file=new FileOutputStream("productos.txt");
		ObjectOutputStream out=new ObjectOutputStream(file);
		for(Producto p:lista){
			out.writeObject(p);
		}
		//out.writeObject(producto);
		out.close();
	}catch(Exception e){
		e.printStackTrace();
		System.out.println("error en eliminar");
	}
	}


	// Modificado el 16/09/2014

	public Producto buscarPorCodigo(int codigo){
		int pos=-1;
		try{
			
			for(int x=0;x<lista.size();x++){
				if(lista.get(x).getCodigo()==codigo){
					pos=x;
					
				}
			}
	}catch(Exception e){
		e.printStackTrace();
		System.out.println("error en buscar Por Codigo");
	}
	if(pos!=-1){
			return lista.get(pos);
		}else{
			return null;
		}
	}

        public void llenarL(){
            lista=new ArrayList<Producto>();
		try{
			FileInputStream file=new FileInputStream("productos.txt");
			ObjectInputStream in=new ObjectInputStream(file);
			Object o=in.readObject();
			while(o!=null){
				lista.add((Producto)o);
				o=in.readObject();
				
			}
			in.close();
		}catch(Exception e){}
        }
        
	public List<Producto> getTodos(){
		return lista;
	}

    @Override
    public List<Producto> getProNombre(String nombre, TiposBusqueda criterio) {
         List<Producto> tmp=new ArrayList<Producto>();
        switch(criterio){
            case INICIA:
                for(Producto p: lista){
                    if(p.getNombre().startsWith(nombre)){
                        tmp.add(p);
                    }
                }
                break;
            case CONTIENE:
                for(Producto p: lista){
                    if(p.getNombre().contains(nombre)){
                        tmp.add(p);
                    }
                }
                break;
        }
        return tmp;
    }
}
